package cc.momas.momall.service.impl;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cc.momas.common.utils.E3Result;
import cc.momas.common.vo.EasyUITreeNode;
import cc.momas.momall.mapper.TbContentCategoryMapper;
import cc.momas.momall.po.TbContentCategory;
import cc.momas.momall.po.TbContentCategoryExample;
import cc.momas.momall.po.TbContentCategoryExample.Criteria;
import cc.momas.momall.service.IContentCatService;

@Service("contentCatService")
public class ContentCatServiceImpl implements IContentCatService {

	@Autowired
	private TbContentCategoryMapper conCatMapper;


	@Override
	public List<EasyUITreeNode> getTree(Long parentId) {
		// 根据parentId查询子节点列表
		TbContentCategoryExample example = new TbContentCategoryExample();
		Criteria criteria = example.createCriteria();
		// 设置查询条件
		criteria.andParentIdEqualTo(parentId);
		criteria.andStatusEqualTo(TbContentCategory.STATUS_NOMAL);//只查询状态为正常的
		// 执行查询
		List<TbContentCategory> list = conCatMapper.selectByExample(example);
		// 创建返回结果List
		List<EasyUITreeNode> resultList = new LinkedList<>();
		// 把列表转换成EasyUITreeNode列表
		for (TbContentCategory tbItemCat : list) {
			EasyUITreeNode node = new EasyUITreeNode();
			// 设置属性
			node.setId(tbItemCat.getId());
			node.setText(tbItemCat.getName());
			node.setState(tbItemCat.getIsParent() ? "closed" : "open");
			// 添加到结果列表
			resultList.add(node);
		}
		// 返回结果
		return resultList;

	}


	@Override
	public E3Result save(TbContentCategory cat) {
		int count = 0;
		//设置持久化对象的属性
		cat.setCreated(new Date());
		//新加的节点一定是叶子节点
		cat.setIsParent(false);
		cat.setSortOrder(TbContentCategory.SORTORDER);
		cat.setStatus(TbContentCategory.STATUS_NOMAL);
		cat.setUpdated(new Date());
		//插入数据库
		count += conCatMapper.insert(cat);
		
		//根据父id查询父节点
		TbContentCategory parent = conCatMapper.selectByPrimaryKey(cat.getParentId());
		if(! parent.getIsParent()) {
			//如果不是一个父节点,就修改为父节点并更新数据
			parent.setIsParent(true);
			count += conCatMapper.updateByPrimaryKeySelective(parent);
		}
		System.out.println(count + "行数据受到了影响");
		//返回结果,包含 持久化对象
		return E3Result.ok(cat);
	}


	@Override
	public int delete(Long id) {
		int count = 0;
		
		//这里要写个递归
		//如果查找以该id为父id的类目,并将它们全部修改为删除状态
		
		TbContentCategory cat = new TbContentCategory();
		cat.setId(id);
		cat.setStatus(TbContentCategory.STATUS_DELETED);
		count += conCatMapper.updateByPrimaryKeySelective(cat);
		
		
		//根据本id查到父类目的id
		//如果父类目的id为0,return
		//如果父类目id不为0 且该父类目下已经没有其他子节点,则把该父类目的isParent属性修改为false
		//
		//根据父id查询父节点
		/*
		 * 还没做完整
		 * 
		 * TbContentCategory parent = conCatMapper.selectByPrimaryKey(cat.getParentId());
		 * if(! parent.getIsParent()) {
		 * 	//如果不是一个父节点,就修改为父节点并更新数据
		 *	parent.setIsParent(true);
		 *	count += conCatMapper.updateByPrimaryKeySelective(parent);
		 * }
		 **/
		return count;
	}


	@Override
	public int updateByIdSelective(TbContentCategory cat) {
		int count = 0;
		cat.setUpdated(new Date());
		count += conCatMapper.updateByPrimaryKeySelective(cat);
		return count;
	}

}
